home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 1999 July / Software of the Month - Ultimate Collection Shareware 263.iso / pc / Xtras / Behavior Library.cst / 00051_Script_UI Drag Snap to Sprite List < prev   
Text File  |  1997-11-17  |  5KB  |  137 lines

  1. -- Gesture Snap to Sprite List
  2.  
  3.  
  4. -- behavior library version 1.1
  5. property  spritestring     --  the string that is set by the user, a list without brackets
  6. property  snapList         --  the list that is built from spritestring, the snap targets
  7. property  snapDistance     --  how many pixels from the reg point of targets to snap
  8. property  xoffset, yoffset --  maintains offfset of cursor after mouse down
  9. property  snapboxes        --  a list [sprite, [top: , bottom: , left: , right]],...
  10. property  tracking         --  if the mouse is now dragging, true
  11. property  currentboxsprite  -- 0 if not in any box, otherwise snapped to sprite
  12. property  boxindex         -- position in snapboxes of currentbox
  13.  
  14. on beginsprite  me
  15.   
  16.   set snapboxes = []
  17.   set the snaplist of me = convertstring (spriteString)
  18.   
  19.   repeat with isprite in snaplist    
  20.     set boxrecord = [    #top:the locv of sprite isprite  - snapDistance,    #bottom : the locv of sprite isprite  + snapDistance,    #left   : the loch of sprite isprite  - snapDistance,    #right  : the loch of sprite isprite  + snapDistance ] 
  21.     
  22.     add snapboxes, [isprite,boxrecord]
  23.   end repeat
  24.   
  25. end
  26.  
  27. on prepareframe me
  28.   if tracking then
  29.     if currentboxsprite = 0 then  
  30.       -- tracking and not yet snapped
  31.       if inanybox (me, the mouseH - xoffset, the mouseV - yoffset) then 
  32.         -- tracking, in a box, snap it
  33.         snap me, currentboxsprite
  34.         exit
  35.         
  36.         
  37.       else 
  38.         -- tracking, not in a box, drag it
  39.         set the locH of sprite the spritenum of me = the MouseH - xoffset
  40.         set the locV of sprite the spritenum of me = the MouseV - yoffset   
  41.         exit
  42.       end if
  43.     end if
  44.     
  45.     -- snapped, tracking, check that mouse is still in the box
  46.     if inabox (me, the mouseH - xoffset, the mouseV - yoffset, boxindex) then
  47.       -- snapped, tracking, and still in the box
  48.       -- don't move the thing, it's still snapped
  49.       exit
  50.     else
  51.       -- was snapped, now outside of box, drag it
  52.       set the locH of sprite the spritenum of me = the MouseH - xoffset
  53.       set the locV of sprite the spritenum of me = the MouseV - yoffset   
  54.       exit
  55.     end if  
  56.   end if
  57.   
  58. end
  59.  
  60.  
  61. on mousedown me
  62.   set tracking  = TRUE
  63.   set xoffset = the mouseH - the locH of sprite the spritenum of me
  64.   set yoffset = the mouseV - the locV of sprite the spritenum of me
  65.   
  66. end
  67.  
  68. on mouseup me
  69.   set tracking = FALSE
  70. end
  71.  
  72. on snap me, snaptarget
  73.   set the locH of sprite the spritenum of me = the locH of sprite snapTarget 
  74.   set the locV of sprite the spritenum of me = the locV of sprite snapTarget  
  75. end
  76.  
  77.  
  78. on inanybox me,x,y
  79.   -- sets currentboxsprite to spritenum of the box the cursor is in, 0 if no box
  80.   -- returns TRUE if inanybox, false otherwise
  81.   set index = 0
  82.   repeat with ibox in snapboxes
  83.     set index = index + 1
  84.     set boxvals = getAt(ibox, 2)  
  85.     if (x < (getprop (boxvals, #right))) and        (x > (getprop (boxvals, #left))) and        (y < (getprop (boxvals, #bottom))) and        (y > (getprop (boxvals, #top))) then
  86.       set currentboxsprite = getAt (ibox, 1)
  87.       set boxindex = index
  88.       return 1
  89.     end if    
  90.   end repeat
  91.   
  92.   set boxindex = 0
  93.   set currentboxsprite = 0
  94.   return 0
  95. end
  96.  
  97. on inabox me,x,y,boxindex
  98.   -- returns TRUE if in boxindex box, false otherwise  
  99.   -- used for tacking if the mouse leaves the current snap box
  100.   set ibox = getAt(snapboxes, boxindex)  
  101.   set boxvals = getAt(ibox, 2)  -- boxvals is a propertylist [top:,bottom:,etc.]  
  102.   if   x < getprop (boxvals, #right) and        x > getprop (boxvals, #left) and        y < getprop (boxvals, #bottom) and        y > getprop (boxvals, #top) then
  103.     return 1
  104.   end if
  105.   
  106.   set boxindex = 0
  107.   set currentboxsprite = 0
  108.   return 0
  109. end
  110.  
  111.  
  112.  
  113. ---
  114.  
  115. on getPropertyDescriptionList
  116.   
  117.   set p_list = [   #spritestring: [ #comment: "Sprite List:",                     #format: #string,                    #default: "4,5,7,8" ],   #snapDistance: [ #comment: "Snap Distance:",                     #format: #integer,                    #default:  8 ]                  ]
  118.   return p_list 
  119. end
  120.  
  121. on getBehaviorDescription
  122.   return "Cause a sprite to snap to the position of any of a list of sprites while dragging." & RETURN & "PARAMETERS:" & RETURN & "ò Sprite List - Enter the channel numbers of sprites to snap to, separated by commas." & RETURN & "ò Snap Distance - Enter the range in pixels within which snapping will occur.  If set to zero, the sprite being dragged always snaps to the location of the nearest list member."
  123.   
  124. end
  125.  
  126.  
  127.  
  128. on convertstring spritestring
  129.   set newlist = []
  130.   set count = 1
  131.   repeat while item count of spritestring <> ""
  132.     add newlist, value (item count of spritestring)
  133.     set count = count + 1
  134.   end repeat
  135.   return newlist
  136. end
  137.